fix(table-core): reset expansion when data changes - #6443
Conversation
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
View your CI Pipeline Execution ↗ for commit 0b815c9
☁️ Nx Cloud last updated this comment at |
| table_autoResetExpanded(table) | ||
| table_autoResetPageIndex(table) |
There was a problem hiding this comment.
We could use batchfrom reactivity here I think, or move the batch invocation into onAfterUpdate 🤔
…d guard first runs (#6499) Auto-resets are `onAfterUpdate` hooks on the row model stage memos. Two related defects made them fire in the wrong places. Expansion auto-reset was only wired from the grouped row model, so `autoResetExpanded` silently did nothing for tables that use expansion without grouping (#5801). It is now wired from `createCoreRowModel` alongside the existing pageIndex, sorting, and cell-selection resets, so a data reference change resets expansion regardless of which features are installed. `table_autoResetExpanded` gained the same feature guard the sorting and cell-selection resets already use, since the core row model runs on tables without the expanding feature. Auto-resets also fired on the very first computation of every stage (#5968). `memo` seeds its dependency list to `[]`, so the initial run always compares as changed, and merely reading a row model on mount scheduled resets. For uncontrolled tables this was self-cancelling (the reset targets `initialState`), which is why it went unnoticed, but it wiped a seeded `initialState.pagination.pageIndex` and pushed unsolicited `onExpandedChange` / `onPaginationChange` calls at controlled consumers on mount. v7 and v8 suppressed the first run with a `registered` flag; the v9 rewrite dropped it. A new `skipFirstRun` util restores that suppression. It is applied in the row model factories, which already run once per table, so each table gets its own flag. The grouped row model tracked previous inputs already and only needed its first-run condition inverted. The worker bridge reports every stage as changed in its first response, so it carries an equivalent `hasAppliedResults` flag. Landing order matters: wiring expansion into the core row model without the first-run guard would have extended the mount-time wipe from grouped tables to every table using expansion, so both halves ship together. - fix: wire `table_autoResetExpanded` into `createCoreRowModel` (#5801) - fix: skip auto-resets on the first computation of each stage (#5968) - add `skipFirstRun` util; apply to core, filtered, and sorted row models - invert the grouped row model's first-run condition - guard `table_autoResetExpanded` when the expanding feature is absent - skip auto-resets on the worker bridge's first applied result - tests: expansion reset without the grouping feature; first-run guard suite covering seeded initial state and controlled-state consumers Examples: migrate the basic examples to `createColumnHelper` across all frameworks, document more table options inline as commented-out defaults, and replace the `filterFns.between` workaround in the React expanding example with the `filterFn_between` individual export that already existed. Closes #5801 Closes #5968 Supersedes #6443 Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Closes #5801
Decision
This remains a valid, narrowly scoped bug in the latest v9 beta. The existing automatic expansion reset is attached to the grouped row-model stage, so it happens only when grouping support is installed. A table using row expansion without grouping retains stale expanded row IDs after its data reference changes, despite the autoResetExpanded option contract.
This is not a new API or a behavior redesign. It connects the existing reset helper to the core data-dependent row model, alongside the existing automatic page-index reset.
Changes
Verification